#include <stdio.h>
#include <stdlib.h>
#include "API/API.h"

int procesarArgumentos(int argc, char *argv[], int *nroPuerta);
void reportarMuseoCerrado(long idPersona);

int main(int argc, char* argv[])
{	
	int nroPuerta = 0;
	long idPersona = 0;
	API api = API();
	
	if (procesarArgumentos(argc, argv, &nroPuerta)) {
		exit(1);
	}
	
	while (1)
	{
		if (api.recibirMensajePuertaSalida(nroPuerta, &idPersona) == false) {
			reportarMuseoCerrado(nroPuerta);
			return 1;
		}
		
		if (api.liberarEspacioDeUnaPersona(nroPuerta) == false) {
			reportarMuseoCerrado(nroPuerta);
			return 1;
		}
		
		if (api.enviarMensajePuertaSalida(nroPuerta, idPersona) == false) {
			reportarMuseoCerrado(nroPuerta);
			return 1;
		}
	}
		
	return 0;	
}

int procesarArgumentos(int argc, char *argv[], int *nroPuerta) {
	char buffer[100];

	if (argc != 2)
	{
		sprintf(buffer, "PuertaSalida - Error: Cantidad de argumentos pasados al programa incorrectos\n");
		write(fileno(stdout), buffer, strlen(buffer));
		return -1;
	}
	
	sscanf(argv[1], "%d", nroPuerta); 
	if (*nroPuerta < 1)
	{
		sprintf(buffer, "PuertaSalida - Error: El identificador de puerta debe ser un número mayor o igual a 1\n");
		write(fileno(stdout), buffer, strlen(buffer));
		return -2;
	}

	return 0;
}

void reportarMuseoCerrado(long idPersona)
{
	char buffer[100];
	sprintf(buffer, "Puerta Salida N°%ld: Museo cerrado. Saliendo.\n", idPersona);
	write(fileno(stdout), buffer, strlen(buffer));
}
